package com.ev.apis.controller.hr;

import com.ev.framework.annotation.EvApiByToken;
import com.ev.framework.utils.R;
import com.ev.hr.service.InterviewRecordService;
import com.ev.hr.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.io.IOException;
import java.text.ParseException;

/**
 * 文件名称： com.ev.hr.InterviewRecordApiController.java</br>
 * 初始作者： ev-monitor</br>
 * 创建日期： 2020-05-12 12:34:33</br>
 * 功能说明： 面试记录表 <br/>
 * =================================================<br/>
 * 修改记录：<br/>
 * 修改作者        日期       修改内容<br/>
 * ================================================<br/>
 * Copyright (c) 2020-2021 .All rights reserved.<br/>
 */

@Api(value = "/",tags = "面试记录表API")
@RestController
public class InterviewRecordApiController {

	/**
	 * 面试记录表 服务类
	 */
	@Autowired
	private InterviewRecordService interviewRecordService;

	/**
	 * 方法描述: [根据条件分页查询面试记录表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param pageParam 分页参数
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/interviewRecord/pageList", method = RequestMethod.POST, apiTitle = "根据条件分页查询面试记录表")
	@ApiOperation(value = "根据条件分页查询面试记录表", produces = MediaType.APPLICATION_JSON_VALUE)
	public R pageList(@Valid @RequestBody @ApiParam("面试记录表分页列表参数对象") InterviewRecordPageParam pageParam) {
		return R.ok(this.interviewRecordService.pageList(pageParam));
	}

	/**
	 * 方法描述: [根据条件分页查询面试记录表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param pageParam 分页参数
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/interviewRecord/myselfPlan", method = RequestMethod.POST, apiTitle = "根据条件分页查询面试记录表")
	@ApiOperation(value = "根据条件分页查询面试记录表", produces = MediaType.APPLICATION_JSON_VALUE)
	public R myselfPlan(@Valid @RequestBody @ApiParam("面试记录表分页列表参数对象") InterviewRecordDetailPageParam pageParam) {
		return R.ok(this.interviewRecordService.pageListForMyself(pageParam));
	}

	/**
	 * 方法描述: [录用清单列表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 09:55:31<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param pageParam 分页参数
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/candidateInfo/hireList", method = RequestMethod.POST, apiTitle = "录用清单列表")
	@ApiOperation(value = "录用清单列表", produces = MediaType.APPLICATION_JSON_VALUE)
	public R hireList(@Valid @RequestBody @ApiParam("录用清单分页列表参数对象") InterviewRecordPageParam pageParam) {
		return R.ok(this.interviewRecordService.hireList(pageParam));
	}


	/**
	 * 方法描述: [根据id获取面试记录表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param id 主键
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/interviewRecord/detail/{id}", method = RequestMethod.GET, apiTitle = "根据id获取面试记录表")
	@ApiOperation("根据id获取面试记录表")
	public R detail(@PathVariable("id") @ApiParam("id") Long id) {
		return R.ok(this.interviewRecordService.getById(id));
	}
	/**
	 * 方法描述: [根据id决定是否需要进入下一步面试流程.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param saveParam 面试记录表参数
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/interviewRecord/nextStep", method = RequestMethod.POST, apiTitle = "保存并进入下一轮")
	@ApiOperation("保存并进入下一轮")
	public R nextStep(@Valid @RequestBody @ApiParam("保存面试记录表对象") InterviewRecordSaveToUpdate saveParam) throws IOException, ParseException {
		return this.interviewRecordService.nextStep(saveParam);
	}

	/**
	 * 方法描述: [根据id决定是否需要进入下一步面试流程.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param saveParam 面试记录表参数
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/interviewRecord/checkNextStep", method = RequestMethod.POST, apiTitle = "验证保存并进入下一轮")
	@ApiOperation("验证保存并进入下一轮")
	public R checkNextStep(@Valid @RequestBody @ApiParam("保存面试记录表对象") InterviewRecordSaveToUpdate saveParam) {
		return this.interviewRecordService.checkNextStep(saveParam);
	}


//	/**
//	 * 方法描述: [批量删除]</br>
//	 * 初始作者: ev-monitor<br/>
//	 * 创建日期: 2020-05-12 12:34:33<br/>
//	 * 开始版本: 1.0.0<br/>
//	 * =================================================<br/>
//	 * 修改记录：<br/>
//	 * 修改作者 日期 修改内容<br/>
//	 * ================================================<br/>
//	 *
//	 * @param ids ID组
//	 * @return R 响应对象
//	 */
//	@EvApiByToken(value = "/apis/interviewRecord/batchRemove", method = RequestMethod.POST, apiTitle = "批量删除")
//	@ApiOperation(value = "批量删除", notes = "批量删除", produces = MediaType.APPLICATION_JSON_VALUE)
//	@Transactional(rollbackFor = Exception.class)
//	public R batchRemove(@RequestBody @ApiParam("批量删除") List<Long> ids){
//		Long[] idsToLong = ids.toArray(new Long[0]);
//		return this.interviewRecordService.batchRemove(idsToLong)>0?R.ok():R.error();
//	}

	/**
	 * 方法描述: [保存面试记录表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param saveParam 面试记录表参数
	 * @return R 响应对象
	 */
	@Transactional(rollbackFor = Exception.class)
	@EvApiByToken(value = "/apis/interviewRecord/saveRecord", method = RequestMethod.POST, apiTitle = "保存面试记录表")
	@ApiOperation("保存面试记录表")
	public R saveRecord(@Valid @RequestBody @ApiParam("保存面试记录表对象") InterviewRecordSaveToUpdate saveParam) throws IOException, ParseException {
		return this.interviewRecordService.saveRecord(saveParam);
	}

	/**
	 * 方法描述: [保存面试日程表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param saveParam 面试记录表参数
	 * @return R 响应对象
	 */
	@Transactional(rollbackFor = Exception.class)
	@EvApiByToken(value = "/apis/interviewRecord/saveSchedule", method = RequestMethod.POST, apiTitle = "保存面试日程对象")
	@ApiOperation("保存面试日程对象")
	public R saveSchedule(@Valid @RequestBody @ApiParam("保存面试日程对象") InterviewScheduleSaveToUpdate saveParam) throws IOException, ParseException {
		return this.interviewRecordService.saveSchedule(saveParam);
	}

	/**
	 * 方法描述: [录用清单，转重点人才库，转黑名单,发送offer,取消录用,入职.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-12 12:34:33<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param resumeStateVO 修改简历的状态
	 * @return R 响应对象
	 */
	@Transactional(rollbackFor = Exception.class)
	@EvApiByToken(value = "/apis/interviewRecord/updateResumeState", method = RequestMethod.POST, apiTitle = "录用清单，转重点人才库，转黑名单,发送offer,取消录用,入职")
	@ApiOperation("录用清单，转重点人才库，转黑名单,发送offer,取消录用,入职")
	public R updateResumeState(@Valid @RequestBody @ApiParam("修改简历状态参数") ResumeStateVO resumeStateVO){
		return this.interviewRecordService.updateResumeState(resumeStateVO);
	}


	
}
